package org.han.interceptor;

import org.han.permission.service.IPermissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Autowired
    private IPermissionService permissionService;
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        // =========  登陆拦截  ========
//        // 从请求中获取 token
//        String token = request.getHeader("token");
//        // 把 token 当做key获取当前登陆用户
//        Employee loginUser = (Employee) LoginConstant.loginMap.get(token);
//        // 判断是否为空 空就拦截
//        if(Objects.isNull(loginUser)){
//            response.getWriter().print("{\"success\":false,\"message\":\"noLogin\"}");
//            return false; //拦截
//        }
//
//        // ==============  权限拦截  ====================
//        //  判断方法上面是否有权限注解
//        if(handler instanceof HandlerMethod){
//            HandlerMethod handlerMethod = (HandlerMethod)handler;
//            Method method = handlerMethod.getMethod();
//            // 判断当前资源需不需要权限来访问
//            RonghuanetPermission methodAnnotation = method.getAnnotation(RonghuanetPermission.class);
//            if(Objects.isNull(methodAnnotation)){
//                // 注解为空,说明当前方法不需要权限就能直接访问 放行
//                return true;
//            }
//            // 获取访问这个资源所需要的权限   类名 :方法名
//            String sn = method.getDeclaringClass().getSimpleName()+":"+method.getName();
//
//            // 获取当前登陆用户他拥有的所有的权限 - 只需要知道当前登陆用户拥有的权限sn有哪一些就可以了,不需要知道权限的所有信息
//            List<String> sns = permissionService.getUserPermissionSns(loginUser.getId());
//
//            // 判断资源所需要的权限,在不在登录用户他拥有的权限里面
//            if(!sns.contains(sn)){
//                // 不存在
//                response.getWriter().println("{\"success\":false,\"message\":\"noPermission\"}");   // 向前端响应错误信息
//                return false;       // 拦截
//            }
//        }
//        return true; // 放行
//    }

}
